package study.数据结构.非线性结构.树.顺序存储树;
/*
    以数组的方式存储树
    注意：  顺序存储二叉树   只适合完全二叉树
 */
public class ArrBinaryTreeDemo {

    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7};
        ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
        arrBinaryTree.preOrder();
    }
}

//编写一个ArrBinaryTree，实现顺序存储二叉树遍历
class ArrBinaryTree{
    private int[] arr;  //存储数据的数组

    public ArrBinaryTree(int[] arr) {
        this.arr = arr;
    }

    //重载
    public void preOrder(){
        this.preOrder(0);
    }

    //重载
    public void infixOrder(){
        this.infixOrder(0);
    }

    //重载
    public void postOrder(){
        this.postOrder(0);
    }

    //编写一个方法完成顺序存储二叉树的前序遍历    index表示数组的下标
    public void preOrder(int index){
        //如果数组为空，或者arr.length =0
        if (arr==null||arr.length==0){
            System.out.println("数组为空不能按照二叉树的前序遍历");
        }
        //输出当前这个元素
        System.out.println(arr[index]);
        //向左递归遍历
        if((index*2+1)<arr.length){
            preOrder(2*index+1);
        }
        //向右递归遍历
        if ((index*2+2)<arr.length){
            preOrder(2*index+2);
        }
    }

    //按照二叉树的中序遍历数组
    public void infixOrder(int index){
        //如果数组为空，或者arr.length =0
        if (arr==null||arr.length==0){
            System.out.println("数组为空不能按照二叉树的前序遍历");
        }
        //向左递归遍历
        if((index*2+1)<arr.length){
            infixOrder(2*index+1);
        }
        //输出当前这个元素
        System.out.println(arr[index]);
        //向右递归遍历
        if ((index*2+2)<arr.length){
            infixOrder(2*index+2);
        }
    }

    //按照二叉树的后序遍历数组
    public void postOrder(int index){
        //如果数组为空，或者arr.length =0
        if (arr==null||arr.length==0){
            System.out.println("数组为空不能按照二叉树的前序遍历");
        }
        //向左递归遍历
        if((index*2+1)<arr.length){
            postOrder(2*index+1);
        }
        //向右递归遍历
        if ((index*2+2)<arr.length){
            postOrder(2*index+2);
        }
        //输出当前这个元素
        System.out.println(arr[index]);
    }
}
